package com.coupon.admin.service;

import com.coupon.admin.dto.CouponUseDTO;
import com.coupon.admin.dto.CouponVerifyDTO;
import com.coupon.admin.entity.UserCoupon;

import java.math.BigDecimal;
import java.util.List;

/**
 * 优惠券使用与核销服务接口
 */
public interface CouponUseService {
    
    /**
     * 下单时使用优惠券
     */
    UserCoupon useCouponForOrder(CouponUseDTO useDTO);
    
    /**
     * 线下扫码核销
     */
    boolean verifyCouponOffline(CouponVerifyDTO verifyDTO);
    
    /**
     * 自动核销（订单支付成功后）
     */
    boolean autoVerifyCoupon(Long orderId);
    
    /**
     * 释放券（订单取消时）
     */
    boolean releaseCoupon(Long orderId);
    
    /**
     * 获取用户可用券列表
     */
    List<UserCoupon> getAvailableCoupons(Long userId, BigDecimal orderAmount, List<Long> productIds);
    
    /**
     * 计算券的抵扣金额
     */
    BigDecimal calculateDiscountAmount(Long couponId, BigDecimal orderAmount, List<Long> productIds);
    
    /**
     * 场景触发券推送
     */
    boolean triggerSceneCoupon(Long userId, String sceneType, Object sceneData);
    
    /**
     * 批量核销券
     */
    boolean batchVerifyCoupons(List<Long> userCouponIds, Long merchantId, String verifyType);
    
    /**
     * 获取券的核销记录
     */
    List<UserCoupon> getCouponVerifyHistory(Long couponId, String verifyType);
    
    /**
     * 检查券是否可用
     */
    boolean isCouponAvailable(Long userCouponId, BigDecimal orderAmount, List<Long> productIds);
}
